#include <stdio.h>
#include <stdlib.h>
#include "SingleLinkListStatic.h"
/* 线性表——链式表（静态单链表）【自编代码】 */
int main() 
{
	SLinkList S;
	DataType i,e,proe,nexte,n;
	Init_SLinkList(S);
	SLinkListTraverse(S);
	printf("S中当前元素个数是：%d",SLinkListLength(S));
	if(IsEmptySLinkList(S))
	{
		printf("\n======S是空表！======\n");
	}
	else
	{
		printf("\n======S不是空表！======\n");
	}
	
	Tail_Init_SLinkList(S);
	SLinkListTraverse(S);
	printf("S中当前元素个数是：%d\n",SLinkListLength(S));
	if(IsEmptySLinkList(S))
	{
		printf("\n======S是空表！======\n");
	}
	else
	{
		printf("\n======S不是空表！======\n");
	}
	
	printf("请输入要查询的位置：");
	scanf("%d",&i); 
	if(GetElem(S,i,&e))
	{
		printf("S表中%d位置值是：%d\n",i,e);
	}
	printf("请输入要查询位置的值：");
	scanf("%d",&n); 
	if(LocateElem(S,n)!=ERROR)
	{
		printf("\nS表中值%d所在位置是：%d\n",n,LocateElem(S,n));
	}
	else
	{
		if(IsEmptySLinkList(S)==TRUE)
		{
			printf("\n当前表空，不能查询%d的位置！\n",n);
		}
		else
		{
			printf("\n值%d的不在表中，可以加入表中！\n",n);
		}
	}
	printf("请输入要返回其前驱的元素值：");
	scanf("%d",&e); 
	if(PriorElem(S,e,&proe)!=ERROR)
	{
		printf("值%d的前驱值是：%d\n",e,proe);	
	} 
	printf("请输入要返回其后继的元素值：");
	scanf("%d",&e); 
	if(NextElem(S,e,&nexte)!=ERROR)
	{
		printf("值%d的后继值是：%d\n",e,nexte);	
	} 
	printf("请输入要插入的位置和值：");
	scanf("%d %d",&i,&e); 
	SLinkListInsert(S,i,e);
	SLinkListTraverse(S);
	fflush(stdin);
	printf("请输入要删除的位置：");
	scanf("%d",&i); 
	SLinkListDelete(S,i,&e); 
	SLinkListTraverse(S);
	ClearList(S);
	SLinkListTraverse(S);
	printf("S中当前元素个数是：%d",SLinkListLength(S));
	if(IsEmptySLinkList(S))
	{
		printf("\n======S是空表！======\n");
	}
	else
	{
		printf("\n======S不是空表！======\n");
	}

	Head_Init_SLinkList(S);
	SLinkListTraverse(S);
	printf("S中当前元素个数是：%d",SLinkListLength(S));
	if(IsEmptySLinkList(S))
	{
		printf("\n======S是空表！======\n");
	}
	else
	{
		printf("\n======S不是空表！======\n");
	}
	printf("请输入要查询的位置：");
	scanf("%d",&i); 
	if(GetElem(S,i,&e))
	{
		printf("S表中%d位置值是：%d\n",i,e);
	}
	
	printf("请输入要查询位置的值：");
	scanf("%d",&n); 
	if(LocateElem(S,n)!=ERROR)
	{
		printf("\nS表中值%d所在位置是：%d\n",n,LocateElem(S,n));
	}
	else
	{
		if(IsEmptySLinkList(S)==TRUE)
		{
			printf("\n当前表空，不能查询%d的位置！\n",n);
		}
		else
		{
			printf("\n值%d的不在表中，可以加入表中！\n",n);
		}
	}
	printf("请输入要返回其前驱的元素值：");
	scanf("%d",&e); 
	if(PriorElem(S,e,&proe)!=ERROR)
	{
		printf("值%d的前驱值是：%d\n",e,proe);	
	}
	printf("请输入要返回其后继的元素值：");
	scanf("%d",&e); 
	if(NextElem(S,e,&nexte)!=ERROR)
	{
		printf("值%d的后继值是：%d\n",e,nexte);	
	} 
	printf("请输入要插入的位置和值：");
	scanf("%d %d",&i,&e); 
	SLinkListInsert(S,i,e);
	SLinkListTraverse(S);
	fflush(stdin);
	printf("请输入要删除的位置：");
	scanf("%d",&i); 
	SLinkListDelete(S,i,&e);
	SLinkListTraverse(S);
	ClearList(S);
	SLinkListTraverse(S);
	printf("S中当前元素个数是：%d",SLinkListLength(S));
	if(IsEmptySLinkList(S))
	{
		printf("\n======S是空表！======\n");
	}
	else
	{
		printf("\n======S不是空表！======\n");
	}

	system("pause");
	return 0;
}